package com.library.utils;

import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.nio.charset.StandardCharsets;
import java.util.UUID;

public class PwdUtil {

    /**
     * 密码加盐加密
     * @param password 明文密码
     * @return  加盐加密的密码
     */
    public static String encrypt(String password) {
        // 1.产生盐值
        String salt = UUID.randomUUID().toString().replace("-", "");
        // 2.使用MD5(盐值+明文密码)得到加密的密码
        String finalPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes(StandardCharsets.UTF_8));
        // 3.将盐值和加密的密码共同返回（合并盐值和加密密码）
        String dbPassword = salt + "$" + finalPassword;
        return dbPassword;
    }


    /**
     * 密码解密
     * @param password 待验证的密码
     * @param dbPassword 数据库保存的加密密码
     * @return  true：密码正确，false：密码错误
     */
    public static boolean decrypt(String password, String dbPassword) {
        boolean result = false;
        if (StringUtils.hasLength(password) && StringUtils.hasLength(dbPassword) &&
                dbPassword.length() == 65 && dbPassword.contains("$")) { // 参数正确
            // 得到盐值
            String[] passwrodArr = dbPassword.split("\\$");
            // 盐值
            String salt = passwrodArr[0];
            // 得到正确密码的加盐加密密码
           String dbFinalPassword  = passwrodArr[1];
            //加密待验证的密码
            String finalPassword = DigestUtils.md5DigestAsHex((salt + password)
                    .getBytes(StandardCharsets.UTF_8));
            if (dbFinalPassword.equals(finalPassword)) {
                result = true;
            }
        }
        return result;
    }







}
